package com.qiaoba.module.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qiaoba.api.auth.entity.dto.RoleDTO;
import com.qiaoba.api.system.entity.vo.SysUserVO;
import com.qiaoba.module.system.entity.SysUserRole;
import com.qiaoba.module.system.entity.param.SysUserRoleParam;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户角色关联 数据层
 *
 * @author ailanyin
 * @date 2023-09-13 18:31:00
 */
public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {

    /**
     * 通过userId查询所绑定的角色ID列表
     *
     * @param userId userId
     * @param status 状态
     * @return roleIds
     */
    List<String> selectRoleIdsByUserId(@Param("userId") String userId, @Param("status") String status);

    /**
     * 批量取消角色所绑定的用户
     *
     * @param roleId  roleId
     * @param userIds userIds
     */
    void deleteByRoleIdAndUserIds(@Param("roleId") String roleId, @Param("list") List<String> userIds);

    /**
     * 批量删除用户绑定的所有角色
     *
     * @param userIds userIds
     */
    void deleteByUserIds(@Param("list") List<String> userIds);

    /**
     * 通过userId查询所绑定的角色(id + dbName)列表
     *
     * @param userId userId
     * @param status 状态
     * @return roles
     */
    List<RoleDTO> selectRoleListByUserId(@Param("userId") String userId, @Param("status") String status);

    /**
     * 查询角色已绑定的用户列表
     *
     * @param param 条件
     * @return 用户集合
     */
    List<SysUserVO> selectAllocatedList(@Param("param") SysUserRoleParam param);

    /**
     * 查询角色未绑定的用户列表
     *
     * @param param 条件
     * @return 用户集合
     */
    List<SysUserVO> selectUnallocatedList(@Param("param") SysUserRoleParam param);
}
